#pragma once

#include "..\..\Interfaces\ISemanticHandler.h"

/// <summary>
/// Abstrakte SemanticHandler Hilfsklasse.
/// </summary>
class BaseSemanticHandler
	: public ISemanticHandler
{
public:
	/// <summary>
	/// Konstruktor des SemanticHandlers.
	/// </summary>
	/// <param name="inName">Der Name der Semantic.</param>
	BaseSemanticHandler(const std::string& inName);

	/// <summary>
	/// Destruktor des SemanticHandlers.
	/// </summary>
	virtual ~BaseSemanticHandler();

	/// <summary>
	///	Wird aufgerufen wenn eine Semantic behandelt werden soll.
	/// </summary>
	/// <param name="inShader">Der Shader welcher den Handler aufgerufen hat.</param>
	/// <param name="inParameter">Ein Handle zum zu verarbeitenden Parameter.</param>
	virtual void OnHandle(IShader* inShader, IShaderParameter* inParameter) = 0;

	/// <summary>
	///	Wird aufgerufen wenn eine ShaderSystem Refresh geschehen ist.
	/// </summary>
	/// <param name="inShader">Der Shader der sich auffrischen soll.</param>
	virtual void OnShaderSystemRefresh(IShader* inShader) = 0;

	/// <summary>
	///	Der Semanticname nach dem gesucht werden soll.
	/// </summary>
	/// <returns>Den Semanticname.</returns>
	virtual const std::string& get_Name() const;

protected:
	std::string Name;
};